Skip to content

使用Node.js自定义数据做chatGPT微调

虽然 GPT 和 ChatGPT 本身已经很强大,但它们的局限性在于训练数据不是最新的,并且可能缺少有关小众主题的信息。我想学习如何使用任意自定义数据轻松训练 GPT 模型,所以我做到了。接下来,我决定将流程记录下来供其他人使用。

在本教程中,您将学习如何从头开始使用您自己的自定义数据微调 GPT。

要查看本教程的最终代码库,请单击

应用程序接口API

OpenAI GPT API 和 SDK 让使用 Python、Node.js 或仅使用 HTTP 请求微调模型变得容易。还有很多社区维护的库community-maintained libraries用于其他语言,如 PHP 和 Ruby。

在本教程中,我们将使用OpenAI Node.js SDK。此 SDK 使用简单,只需几行代码即可对 OpenAI 进行 API 调用。

例如,要检索完成,我们可以调用createCompletion方法:

const response = await openai.createCompletion({
  model: 'davinci',
  prompt: "What is Lens Protocol",
  max_tokens: 200
})

在我们的例子中,我们只是将davinci模型替换为我们自己的模型,该模型将使用我们为训练上传的自定义数据集。

先决条件(Prerequisites)

要学习本教程,您需要在计算机上安装以下软件:

  • Python

  • Node.js

您还需要一个 OpenAI API 密钥。您可以在https://openai.com获得一个。

入门(Getting started)

首先,我们将在一个空目录中创建一个新的 Node.js 项目:

mkdir custom-ai-model
cd custom-ai-model
npm init --y

通过添加以下配置行更新新的package.json文件以使用 ES 模块:

"type": "module",

接下来,设置环境变量以保存您的 OpenAI API 密钥。您可以在终端会话或配置文件中设置它,例如.bashrc或.zshrc::

export OPENAI_KEY="your-api-key"

接下来,我们将安装openai npm 包:

npm install openai

最后,我们将安装 OpenAI CLI 和 OpenAI 数据库:

pip install --upgrade openai openai"[datalib]"

现在我们准备开始编写一些代码了!

创建训练数据(Creating the training data)

OpenAI 提供了 一些模型,但是当进行Fine-tuning时,目前只有原始的GPT-3基础模型可以作为起点,例如davinci、curie、babbage和ada。我们将使用davinci模型。

您的数据需要按照以下格式在JSONL文档中创建,每个声明在一个新行中分隔:

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

建议至少提供几百个这样的例子,大多数来源推荐 500 个或更多。

根据我的经验,创建几十个输入至少会给你一些基本的结果,你可以在本教程中测试这些结果,但它不足以用作生产产品。

来自

创建文档后,OpenAI 会提供 一个命令行实用程序,该实用程序将改进数据格式,建议在上传之前运行。

openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

您可以在

一旦您的数据集准备就绪,我们就可以创建一个脚本将其上传到 OpenAI。

创建 API 接口(Creating the API interface)

该文件将定义我们将用于与 OpenAI API 交互的 API。

由于我们将一遍又一遍地重复使用这段代码,我们将把它分离到它自己的文件中,然后将它导入到我们的其他文件中。

创建一个名为api.js的文件并添加以下代码:

/* api.js */
import { Configuration, OpenAIApi } from 'openai'
const openaiApiKey = process.env.OPENAI_KEY
const configuration = new Configuration({
  apiKey: openaiApiKey
})

export const openai = new OpenAIApi(configuration)

上传训练数据(Uploading the training data)

现在我们已经创建了 API,我们可以使用它来上传我们的文件以备后用。

创建一个名为uploadFile.js的文件并添加以下代码:

/* uploadFile.js */
import { openai } from './api.js'
import fs from 'fs'

async function upload() {
  try {
    const response = await openai.createFile(
      fs.createReadStream('./data_prepared.jsonl'),
      "fine-tune"
    );
    console.log('File ID: ', response.data.id)
  } catch (err) {
    console.log('err: ', err)
  }
}

upload()

接下来,运行脚本:

node uploadFile.js

上传完成后,记下最后生产的文件 ID,我们将在下一步中用到它。

创建微调(Creating the Fine Tune)

现在我们已经上传了训练数据并有了文件 ID,我们可以使用它来自定义训练我们的模型。

为此,创建一个名为createFineTune.js的新文件并添加以下代码:

/* createFineTune.js */
import { openai } from './api.js'

async function createFineTune() {
  try {
    const response = await openai.createFineTune({
      training_file: 'your-file-id',
      model: 'davinci'
    })
    console.log('response: ', response)
  } catch (err) {
    console.log('error: ', err.response.data.error)
  }
}

createFineTune()

接下来,执行脚本以开始微调您的模型:

node createFineTune.js

列出你的微调(Listing your Fine Tunes)

创建微调后,将需要一些时间来处理。我们可以通过调用 API 方法获取微调的状态以及模型 ID 。

创建一个名为listFineTunes.js的新文件并添加以下代码:

/* listFineTunes.js */
import { openai } from './api.js'

async function listFineTunes() {
  try {
    const response = await openai.listFineTunes()
    console.log('data: ', response.data.data)
  } catch (err) {
    console.log('error:', err)
  }
}

listFineTunes()

运行脚本。

node listFineTunes.js

该过程需要几分钟才能完成。该过程完成并再次运行脚本后,您应该会看到填充了新模型 ID 的字段。

记下这个 fine_tuned_model ID,您将在下一步中用到它。

测试一下(Testing it out)

现在微调已经处理好了,我们的。新模型准备好了,我们可以试试看!

创建一个名为createCompletion.js的新文件。在这里,添加以下代码。请务必使用您的型号名称更新该值:

/* createCompletion.js */
import { openai } from './api.js'

async function createCompletion() {
  try {
    const response = await openai.createCompletion({
      model: 'your-custom-model-name',
      prompt: 'What is Lens Protocol',
      max_tokens: 200
    })
    if (response.data) {
      console.log('choices: ', response.data.choices)
    }
  } catch (err) {
    console.log('err: ', err)
  }
}

createCompletion()

运行脚本:

node createCompletion.js

🎉恭喜🎉 (Congratulations)

您已经使用 GPT3 成功部署了自己的自定义模型!

要查看本教程的最终代码库,请单击

本文翻译自:《Supercharge Your GPT Model: Custom Data Fine-Tuning using Node.js

520608.com 备案号:粤ICP备13053123号